package com.local.guava.optional;

import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;

public class OptionalDemo {
    /**Optional类
     * Optional.of(value);
     * Optional.of(value).isPresent() 方法返回布尔类型，判断类型是否为null,null会报错(不接受null)，反之返回true;
     * Optional.of(value).get() 返回对应的值
     * @param a
     */
	public static void getOptional_of(Integer a){
		Optional<Integer> possible = Optional.of(a);
		boolean flag = possible.isPresent(); // returns true
		Integer in = possible.get(); // returns 5
		System.out.println(flag+";"+in);
	}
	
	
	/**
	 * Optional类
	 * Optional.fromNullable(value);
	 * Optional.fromNullable(value).isPresent() null返回false(接受null),反之true
	 * Optional.fromNullable(value).orNull()  null返回空，反之对应值
	 * @param a
	 */
	public static void getOptional_fromNullable(Long a){
		Optional<Long> possible = Optional.fromNullable(a);
		boolean flag = possible.isPresent(); // returns true
		Long in = possible.orNull();
		//Long ina = possible.or(a);
		System.out.println(flag+";"+in);
	}
	
	/**
	 * Preconditions类
	 * Preconditions.checkNotNull(String value, String errorMsg) 该方法返回String
	 * 第一个值传入value是否为空,第二个传入的值errorMsg如果null,返回对应errorMsg信息
	 * @param name
	 */
	public static void get_Preconditions(String value){
		String pre = Preconditions.checkNotNull(value,"is null?  -43 line");
		System.out.println(pre);
	}
	
	/**
	 * Preconditions类
	 * Preconditions.checkArgument(boolean flag, String errorMsg) 该方法可以判断很多东西
	 * 第一个值传入boolean值,第二个传入的值errorMsg,如果false,返回对应errorMsg信息,true不返回
	 * @param name
	 */
	public static void get_Preconditions_boolean(Integer a){
		Preconditions.checkArgument(a>=1&&a<=99,"age must in range (1,99");
	}
	
	/**
	 * Objects类
	 * Objects.equal(Object arg1, Object arg2); 判断两个Object/String是否相等
	 * @param a
	 * @param b
	 */
	public static void get_Object_equal(Object a,Object b){
		boolean flag = Objects.equal(a, b);
		System.out.println(flag);
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		getOptional_of(15);
		getOptional_fromNullable(1000l);
		getOptional_fromNullable(null);  //不抛异常(接受null)
		
		get_Preconditions("我不是空");	
		//get_Preconditions(null);  //如果null,抛异常返回对应errorMsg信息
			
		get_Preconditions_boolean(99);
		//get_Preconditions_boolean(10000); //不符合条件，抛异常返回对应errorMsg信息，符合条件跳过不处理
		
		get_Object_equal(null,null);
		//get_Object_equal("","");
		get_Object_equal("1",null);
		get_Object_equal("2",2);
		get_Object_equal(3,3);
		get_Object_equal("4","4");
		get_Object_equal("8",8);
	}

}
